package com.itbaizhan.itbaizhanlock.service;

import com.itbaizhan.itbaizhanlock.entity.TOrder;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author itbaizhan
 * @since 05-27
 */
public interface ITOrderService extends IService<TOrder> {

    /**
     * 创建订单
     * @param productId
     * @param purchaseNum
     * @return
     */
    String createOrder(Integer productId,Integer purchaseNum);

    /**
     * 创建订单，用悲观锁实现
     * 解决多个jvm运行时，超卖问题
     * @param productId
     * @param purchaseNum
     * @return
     */
    String createOrderPessimisticlock(Integer productId,Integer purchaseNum);


    /**
     * 创建订单，用乐观锁实现
     * 解决多个jvm运行时，超卖问题
     * @param productId
     * @param purchaseNum
     * @return
     */
    String createOrderOptimisticlock(Integer productId,Integer purchaseNum);

    /**
     * 创建订单，用redis实现,这是最基本的实现，可能出现问题
     * 解决多个jvm运行时，超卖问题
     * @param productId
     * @param purchaseNum
     * @return
     */
    String createOrderRedis(Integer productId,Integer purchaseNum);


    /**
     * 创建订单，用redission实现,修复了上面使用redis出现的问题
     * 不可重入，不可重试，超时释放，主从一致性
     * 解决多个jvm运行时，超卖问题
     * @param productId
     * @param purchaseNum
     * @return
     */
    String createOrderRedission(Integer productId,Integer purchaseNum);


    /**
     * 创建订单，zookeeper
     * zookeeper分布式锁可靠性最高
     * 解决多个jvm运行时，超卖问题
     * @param productId
     * @param purchaseNum
     * @return
     */
    String createOrderZookeeper(Integer productId,Integer purchaseNum) throws Exception;
}
